vue：
	框架类型为：module view view-module==>mvvm;
	是一种渐进式框架：按需引入


	下载:基础语法部分
		npm i(install) vue  node提供
		cnpm i(install) vue 淘宝镜像提供
		在node_modules文件夹中找到vue.js文件
	cdn加速器


	面试题：
		在new vue的过程中实际走了几步？
			1：步创建一个空的对象
			2：改变this指向；
			3：将创建的对象赋值给一个变量


	基本用法：
			el    绑定一个作用域
			data  定义初始化变量；
			methods 定义事件函数：函数中的this指向当前实例
			注：
				1.定义的变量名和函数名不能重名；否则会报错；（watch监听除外）
			例：
				el:'#box' 
				data：{str:'hello vue'} 
				methods:{ 
					btn(){
						this.str='hello world'; 数据更改视图发生改变
						console.log(this)
						}
					}   
				<div id="box">
					<button v-on:click='btn'>按钮</button>
					模板输出：{{str}}
				</div>
				注：1.要在此作用域内的子级绑定事件，在#box作用域外不行；
					2.定义的变量名和函数名不能重名；否则会报错；
模板输出：{{}} 不会解析标签 ==>innerText
			vue实例第一层的属性或方法，可以直接输出；
		例：	
			<div id='box'>
				<div>{{str}}</div>
				<div>{{str1+str2}}</div>
				<div>{{str1}}{{str2}}</div>
				<div>{{btn()}}</div>
			</div>
			new Vue({

				el:'#box',
				data:{
					str:'<div>hello world</div>',
					str1:'蔡',
					str2:'徐坤'
				},
				methods:{
					btn(){
						return this.str1+this.str2
					}
				}
			})
			
			结果：'<div>hello world</div>'
					蔡徐坤
					蔡徐坤
					蔡徐坤
指令：
	v-text输出 不会解析标签  ==>innerText

	
			#将string类型的Html直接输出
			例：
				<h2>{{str}}</h2>
				<h2 v-html="str"></h2>
				new Vue({
					el:'#box',
					data:{
						str:'<a href="https://www.baidu.com">百度一下</a>'
					}
				})
				结果：	
					<h2>'<a href="https://www.baidu.com">百度一下</a>'</h2>
					<h2><a href="https://www.baidu.com">百度一下</a></h2>
	v-html输出 会解析标签  ==>innerHTML
				#可以将string类型的html解析成标签
	v-pre  	跳过编译（不需要表达式） 不进行编译	
			例：
			<div>{{str}}</div>  div中的内容会被编译出来对应的内容
			<div v-pre>{{str}}</div> div中的内容不会被编译，会直接显示
			new Vue({
				el:'#box',
				data:{
					num:123
				}
			})
			结果：
				<div>123</div>
				<div>{{str}}</div>
	v-cloak 在渲染(编译完成)之后移除此指令（不需要表达式）
				作用：隐藏未编译状态，解决页面闪动
				原因：当刷新页面时，因为编译需要时间，浏览器会直接显示未编译状态；
				例：
				<div id='box' v-cloak>
					{{str}}
					<div v-text="str"></div>
					<div v-html="str"></div>
					<div v-pre>{{str}}</div>
				</div>
				中括号是属性选择器
				[v-cloak]{
					display: none;
				}
	v-once 只渲染一次
			#该指令后面不需要跟任何表达式
			#该指令表示元素和组件(组件后面才会学习)只渲染一次，视图不会随着数据的改变而改变。
				例：	
					<div id="box">
						<div v-once>{{num}}</div>
					</div>
					var vm=new Vue({
						el:'#box',
						data:{
							num:12,
						}
					})
					vm.num=2000;  再次修改值，数据更改视图不会发生改变
	v-model:双向绑定
			作用：Vue中使用v-model指令来实现表单元素和数据的双向绑定。
			原理： 
					<input type="text" v-bind:value="message" v-on:input="message = $event.target.value">
										<!-- 默认值：先将变量的值赋值给输入值        只要有输入就会将输入的值赋值给变量 -->
					<h1>{{message}}</h1>
					当我们在输入框输内容的时候，因为input中的v-model绑定了message，所以会实时将输入的内容传递给message，则message发生变换，
					当message放上变化的时候，因为上面我们使用Mustache语法，将message的值插入到DOM中，所以DOM会发生响应的改变。
					因此，通过v-model实现了表单的双向绑定。
			表单元素：（绑定数据的类型和表单的输出有关系）
			文本：string（单个值）
					<input type="text" v-model="str_1">
					<div>{{str_1}}</div>
			单选：string（单个值）
					<input type="radio" v-model='str_2' value='女'>女  与name没关系，可设置也可不设置
					<input type="radio" v-model='str_2' value='男'>男
					<div>{{str_2}}</div>
			多选：array（多个值）
					<input type="checkbox" value='苹果' v-model="str_3">苹果
					<input type="checkbox" value='香蕉' v-model="str_3">香蕉
					<input type="checkbox" value='榴莲' v-model="str_3">榴莲
					<div>{{str_3}}</div>
			下拉：string  (value>text) 如果删除value就是text值
					<select v-model="str_4">
						<option value="http://www.taobao.com">淘宝</option>
						<option value="http://www.baidu.com">百度</option>
					</select>  
					<div>{{str_4}}</div>   http://jsonplaceholder.typicode.com/todos
					new Vue({     
						el:'#box',
						data:{
							str_1:'hello',  设置默认值
							str_2:'女',     设置默认值
							str_3:['榴莲'], 设置默认值
							str_4:'http://www.taobao.com'  设置默认值
						}2212582
					})
			    注意！！！
				不能和文件表单（file）使用 

	v-model的修饰符：
				.lazy  取代input监听change事件：内容改变并且失去焦点时实现双向绑定
						<input type="text" v-model.lazy="str">
						<div>{{str}}</div>
				.number   输入的内容转为number或string类型
						默认情况下，在输入框中无论我们输入的是字母还是数字，都会被当做字符串类型进行处理。
						number修饰符可以让在输入框中输入的内容自动转成数字类型或string
						<input type="text" v-model.number="str_1">
						<div>{{typeof(str_1)}}</div>
				.trim   过滤首尾空格:如果要自动过滤用户输入的首尾空白字符，使用trim
				        trimLeft   trimRight
						<input type="text" v-model.trim="str_2">
						<div>{{str_2}}</div>

						

						修饰符：
					.stop 阻止事件冒泡
						 例：
							@click.stop="btn6"
					.prevent	阻止默认事件：
					     例：串联修饰符
							@keyup.right.prevent='函数名' 取消右键出现菜单的默认事件
					.left：鼠标左键事件
						    @click.left.prevent='函数名'   
					.right： 鼠标右键事件
							@click.right='函数名' 
					.middle 点击鼠标中间触发
					.once:	点击时只触发一次；
                            例：<div @click.once='no1'>0</div>
                  







    //列表渲染
	v-for循环：
			数字：可以直接放数据，也可以放变量名；
				v-for="(每一项,下标) in 12"
			字符串：
				v-for="(每一项,下标) in 'str'"
			数组：
				v-for="(每一项,下标) in [1,2,3,4]"
			对象：
				v-for="($value,$key,$index) in {name:'小明',age:12}" 值，键，下标
				例：
					<div id="box">
					<!-- 数字循环 -->
						<div v-for="(i,$index) in num"> 
							{{i}}==>{{$index}}
						</div>
					<!-- 字符串循环 注：字符串要加上引号，否则会被认为变量（报错变量 is not defined）-->
							<div v-for="(i,$index) in 'ajoajijaojfaie'">
								{{i}}===>{{$index}}
							</div>
					<!-- 数组循环： -->
						<div v-for="(i,$index) in [1,2,3]">
							{{i}}===>{{$index}}
							<div>{{t.title}}</div>   子级可以直接使用父级循环的每一项元素
							<div>{{t.author}}</div>
						</div>
					<!--对象循环 -->
						<div v-for="($value,$keys,$index in json">
							{{$value}}==>{{$keys}}==>{{$index}}
						</div>
					</div>
					new Vue({
						el:'#box',
						data:{
							num:12,
							arr:[1,2,3],
							json:{name:'小明',age:12}
						}
					})
			v-on  事件绑定
					语法：
						v-on:click="事件函数"
					简写：@click='事件函数'
					用法: 
						需要参数时，加括号传参；不需要参数时，无需带括号




		键盘事件：@keyup='函数名'
						    键修饰符：
									键别名
									enter回车键  
										<input @keyup.enter="onEnter">
									left 键盘左键
										<input @keyup.left="onEnter">
					         		right 键盘右键
										 <input @keyup.right="onEnter">
									top 键盘上键
										<input type="text" @keyup.up="onEnter">
									down 键盘下键
										<input type="text" @keyup.down="onEnter">
									delete键
									<input @keyup.13="onEnter">
									键代码
									13回车 
										<input @keyup.13="onEnter">





		事件对象：
							我们需要event对象，同时又需要其他参数时：使用$event
								例：	
									<div v-for="(i,$index) in 6" @click="btn3($index,$event)">
										event
									</div>
									new Vue({
									el:'#box',
									methods:{
											btn3($index,ev){
											console.log(ev,$index)
											}
										}
									})
							我们需要event对象，不传其他参数时：
								例：
									<div v-for="(i,$index) in 1" @click="btn4">
										event
									</div>
									new Vue({
									el:'#box',
									methods:{
											btn4(event){
												console.log(event)
											}
										}
									})
			


			v-show  显示/隐藏   
					值：=true/false  也可以为表达式；
					与v-if的区别：css操作（display:none） 所有的dom都会加载  适合频繁切换  没有缓存
					原理：会将表达式返回布尔值，如果表达式返回true则显示，如果表达式返回false则不显示
					例：	
						<button @click=type=!type>隐藏</button>
						<div style='width:100px;height:100px;background:red;' v-show='type'></div>
						var vm=new Vue({
							el:'#box',
							data:{
								type:true
							},
						})

					例:
						<button @click=type=!type>隐藏</button>
						<div style='width:100px;height:100px;background:red;' v-if='type'></div>
						var vm=new Vue({
							el:'#box',
							data:{
								type:true
							},
						})

						
					无缓存：
						<select v-model='str_5'>
							<option value="1">百度一下</option>
							<option value="2">淘宝一下</option>
						</select>
						<div v-show="str_5==1">
							<input type="text">
							<button>百度一下</button>
						</div>
						<div v-show="str_5==2">
							<input type="text">
							<button>谷歌搜索</button>
						</div>
						new Vue({
							el:"#box",
							data:{
								type:'1'
							},
						})
			//条件渲染  			
			判断条件：v-if、v-else、v-else-if  
					这三个指令与JavaScript的条件语句if、else、else if类似。
					v-if  
						原理：v-if后面的条件为false时，对应的元素以及其子元素不会显示。可以进行显示/隐藏 切换
						与v-show的区别：dom操作（消失） 只加载符合条件的dom  适合偶尔的判断  有缓存 消耗高
						
					v-else  使用的元素必须是同级之间的
							例：	
								v-else配合v-if使用，当v-if的表达式不满足条件时，v-if的dom不显示，v-else的dom元素显示；
								当v-if表达式满足条件时，v-if的dom显示，v-else不显示
								<span v-if="isuser">
									<label for="user">手机登陆</label>
									<input type="text" id="user" placeholder="手机登陆" >
								</span>
								<span v-else>
									<label for="emial">邮箱登陆</label>
									<input type="text" id="emial" placeholder="邮箱登陆">
									</span>
								<button @click="isuser=!isuser">登录转换</button>
								const app = new Vue({
									el: '#box',
									data: {
									  isuser: true
									}
								  })
					v-else-if  
						   	例:
								<button @click=type=!type>隐藏</button>
								<div style='width:100px;height:100px;background:red;' v-if='type'></div>
								var vm=new Vue({
									el:'#box',
									data:{
										type:true
									},
								})
							有缓存：
								<select v-model="type" >
									<option value="1">百度一下</option>
									<option value="2">谷歌搜索</option>
								</select>
								<div v-if="type == 1">
									<input type="text"/>
									<button>百度一下</button>
								</div>
								<div v-else-if="type == 2">
									<input type="text"/>
									<button>谷歌搜索</button>
								</div>
								new Vue({
									el:"#box",
									data:{
										type:'1'
									},
								})
			v-bind 
					作用：绑定属性
					语法：v-bind:src="'a.jpg'"
					缩写：:src="''"
					可以进行绑定a标签的href属性、img元素的src属性、标签的class、id属性等；
							注!!! 
								加引号和不加引号的区别：不加引号当成变量去解析，加引号当成字符串去解析。
								外面的双引号是vue语法中的引号，内引号是字符串要带的引号；
					
							例：
								:src="'a.jpg'"   路径不是变量，需要带字符串
					例：	 
							:src="'a.jpg'"
							绑定style语法：
								1.	对象写法
									<div :style="{width:'100px',height:'100px'}"></div>  style使用对象的写法 属性是字符串加引号，变量不加引号
									<div :style="btn()"></div>
								2.	数组写法
									<div :style="[json1,json2]"></div>  	style绑定多个用数组
									new Vue({
										el:'#box',
										data:{
											json1:{width:'100px'},
											json2:{height:'100px'}
										},
										methods:{
											btn(){
												return{
													width:'100px',
													height:'100px'
												}
											}
										}
									})
							绑定class语法：
								:class="'box1'"  绑定一个类名
								:class="['box1','box2']"  绑定多个用数组
					在写CSS属性名的时候：
								font-size==>fontSize 驼峰式写法





								注意事项：V-FOR   面试题 ？？？？？？？？？？？？？
数据更新但视图不更新？
			数组：
			  	1.通过下标改数据
					例：this.arr[0]=100
				解决办法：
					解决一：使用splice方法
					 		例:this.arr.splice(0,1,100)
					解决二：使用vue提供的this.$set  
					this.$set(修改对象,修改位置/对象的属性,修改内容)
							例：this.$set(this.arr,0,100)
							
				2.通过length改长度；
					例：this.arr.length=2;
				解决办法：
					使用slice方法
						例：this.arr=this.arr.slice(0,2)
						//slice方法会返回新的数组，所以需要再给arr重新赋值
						console.log(this.arr)
			对象：
				动态添加key值数据 json.name='小明'
					使用this.$set
					this.$set(this.json,'age',12)
			作用域内直接用实例中的变量;实例函数中用变量使用this.变量;实例函数中使用for循环中的下标时需要传值





获取dom元素：
			ref 用来给元素注册引用信息
					<div ref='aaa'></div>
					<div ref='bbb'></div>
			this.$refs 获取dom元素（dom元素的集合）
					console.log(this.$refs)  返回一个对象（包含所有注册过的元素）
					console.log(this.$refs.aaa)  获取具体某个dom元素
					例： 如果是用循环注册的元素
						<button @click="btn">点击</button>
						<div v-for="(i,$index) in 10" ref='aa'>{{i}}</div>
						console.log(this.$refs.aa)  获取到的是一个数组（这个数组中包含所有的aa元素）
						console.log(this.$refs.aa[1])   获取到数组中某一个元素


生命周期：	事物从诞生到消亡的整个过程；
			作用：生命周期中主要用来触发事件的
				var vm=new Vue({
					el:'#box',
					data:{
						num:5,
						a:2,
					},
					创建前:实例刚被创建==>el:undefined;
						beforeCreate(){
							console.log(this.$refs.ccc) //undefined
							console.log('创建前'+this.num)//undefined
						},
					创建后:实例创建完成，属性已绑定，但dom还未生成  这时可以获取到变量值了===>el:'#box'
						created(){
							console.log(this.$refs.ccc)
							console.log('创建后'+this.num)//2 
						},
					渲染前：模板编译之前===><div>{{str}}</div>
						beforeMount(){ 
							console.log(this.$refs.ccc)
								console.log('渲染前'+this.num)
							},
					渲染后：模板编译之后：一般会做些ajax请求===><div>123</div>
						mounted(){
							console.log(this.$refs.ccc)
							console.log('渲染后'+this.num)
						},
					修改前：视图修改前  （拿到更新前的dom）   多次触发
						beforeUpdate(){
							console.log(this.$refs.ccc)
							console.log('修改前'+this.nuvm)
						},
					修改后：视图修改后 (拿到更新后的dom)
						updated(){
							console.log(this.$refs.ccc)
							console.log('修改后'+this.num)
						},
					销毁前：需要手动销毁
						beforeDestroy(){
							console.log(this.$refs.ccc)
						},
					销毁后：
						destroyed(){
							console.log(this.$refs.ccc)
						}
				})


				手动销毁 vm.$destroy()     销毁之后dom元素不会消失  事件消失,
				在渲染后修改值，才会触发修改；相当于渲染两遍；
				在渲染前修改值，相当于只渲染了一次；不会触发修改


ajax
			vue resource插件，可以直接引入	
					下载：（ajax部分）
						cnpm i vue-resource
						
								this.$http.get(url,{params:{user:123,pass:124}}).then((data)=>{},(err)=>{})
											  请求地址	 向后台发送的参数   			成功的回调    失败的回调
						post	
								this.$http.post(url,{user:123,pass:124},{emulateJSON:true}).then((data)=>{},(err)=>{})
													   					  规定发送格式
						jsonp
								this.$http.jsonp(url,{params:{user:123,pass:124},jsonpcallback:callback}).then((data)=>{},(err)=>{})
																					请求时重写回调函数的名字
			axios插件，环境开发
				webpack
				代理服务器
			
侦听属性watch
			可以侦听vue实例第一层的属性和方法，事件函数（methods）除外
			注！！监听的变量发生改变时，才会触发watch监听
			用法：
				侦听哪个变量名，就以哪个变量名定义函数进行侦听
				watch:{
					'btn'(new,old){   	加引号
						console.log(new,old)
					},
					btn(new,old){   不加引号
						console.log(new,old)
					}
				}
				例：
				 new Vue({
					 el:'#box',
					 data:{
						 str:'hello'
					 },
					 watch:{
					侦听数值
						 str(newdata,olddata){  
							 新值    旧值
							this.str=olddata
							console.log(newdata)   当str发生改变时就会输出
							console.log(olddata)
						 },
					监听数组：
						num(a,b){   循环的元素是根据变量变化的，所以可以用num监听
						console.log(this.$refs.aa)
						 },
						'$refs.aa'(a,b){
						 	console.log(this.$refs.aa)
						 },
					监听对象
						'json.a'(a,b) {	当json.a发生改变时触发watch监听
							console.log(this.json.a)
						}
					 }
				 })
			watch和生命周期更新前后的区别是什么？
				 生命周期侦听的是整个视图改变，任何一个视图的改变都会触发，而不是某个数据的变化
				 侦听属性：侦听的是单个数据，只要这个数据改变才会触发

				 
计算属性：
		computed 
		用法：
			使用时在HTML上直接输出：{{btn}}
			可以用作变量进行循环：v-for="i in btn"
		区别：
				与methods之间的区别？
					methods：事件函数，需要使用函数调用（btn_num()），一部分发生改变会重新计算，没有缓存；不可以被watch监听
							例：
								<div>{{btn1_num()}}</div>
								new Vue({
									el:'#box',
									data:{
										arr:[1,2,3,4,5,8]
									},
									methods:{
										//事件函数计算属性
										btn1_num(){ 
											var newnum=0;
											for(var i=0;i<this.arr.length;i++){
												newnum+=this.arr[i]
											}
											return newnum
										}
									}
								})
					computed: 计算使用到的数据发生改变，会计算改变的部分 有缓存，可以被watch进行侦听
							例：	
								<div>{{btn_num}}</div>	当成属性来调用
								new Vue({
									el:'#box',
									computed:{
										btn_num(){
											var newnum=0;
											for(var i=0;i<this.arr.length;i++){
												newnum+=this.arr[i]
											}
											return newnum
										}
									}
								})
								
			computed和侦听属性的区别？
					watch会侦听一个数据并返回侦听到的前后值
					computed可以同时检测多个数据，并用于计算；
						





node：
			作用：
					环境：
						webpack、gulp、vue-cli、react-create-app 等都要依赖node环境
					写后台: 
						写后台接口
					创建服务器
			node官网：
					https://nodejs.org/en/
			node中文网：
					http://nodejs.cn/
			语法：
					为js语法--创建后缀为xx.js的文件
			下载：
					1.  npm init 项目初始化
							//会下载一个package.json文件（标准的对象格式）



express  	简化node语法
			与node的关系相当于Js跟jq的关系
					2. 下载依赖（原生node不需要下载依赖，如需使用express需要下载依赖）
						cnpm i express --save/--s   记录文件
						cnpm i vue express vue-resource --save  express加ajax插件
									//会下载一个node_modules文件（删掉之后）

								注！删掉node_modeule文件，解决办法：
									1.	//之前下载的package.json文件有一个属性"express": "^4.17.1" 会有一个记录，
										//复制版本号：cnpm i express@4.17.1 --save（有这个版本号了，不需带--save） 
									对于多个插件不方便 不方便，所以用：
									2.   cnpm i   记录的文件
											//下载package.json中记录的文件并下载
						注：
							-g		全局安装 
							clear   清除当前窗口的所有指令
					3. 创建入口文件
							//创建一个后缀为js的文件
					4.配置启动指令
							直接启动指令：node a（文件名/可省略后缀.js）	
							或使用npm启动：使用方法启动指令
								修改package文件————"start/dev": "node a"
												方法		指令（后缀名.js可以省略）
								指令：node start/指令：node dev	如果没有dev方法，可以用 npm run dev	

								
							
					const express=require('express'); 引入express插件
								   引入
					const a=express()	创建服务器（node可以自己创建服务器）
					创建get接口
					post：app.use('/',express.urlencoded({}))  中间件
						app.get/post('/a',function(req,res){   /a开头必须是'/'
							参数；
							request请求（前台数据给后台数据）
							response响应（后台给前台数据）
							res.setHeader('Access-Control-Allow-Origin','*')  解决跨域问题
										    请求头格式                   允许谁访问
							get:   let json=req.query 取到前台给后台的数据（就是拼写的参数）
							post:   let json=req.body 取到前台给后台的数据（就是拼写的参数）
							console.log(json)   会在小窗口输出
							res.send([{type:0,data:''}])	后台给前台发送数据
							注！！！send后面的代码不执行；
						})

					a.listen(8000,function(){		监听服务器
						console.log('ok')  会在小窗口输出
					})
					注！！    每次js发生改变，服务器重新启动加载代码；
							 关闭：ctrl+c 按两次；
							 创建的get接口可以在浏览器中打开，接口：localhost:8000/a；
							 在浏览器中每修改一次接口参数，都会在小黑框中输出数据
	
							 

文件操作系统：
		fs  插件
		引入fs插件：
			const fs=require('fs')
		启动指令：
				node 文件名（可省略后缀.js）
				node fs
文件：file	
		创建：写一个文件（可以进行更新）
		注！！会将内容强行转换成字符串再创建文档（当内容是一个数组或对象时需手动转换成string类型）
				异步（有回调函数）
					fs.writeFile('名字','内容','编码',function(err){    编码为utf-8简化为utf8
						if(err){
							console.log(err)
							return 
						}
						console.log('ok')//小黑窗中输出
					})	
				同步
					fs.writeFileSync('名字','内容','编码')
					console.log('ok')//小黑窗中输出
				写多次，之前的会被覆盖掉；
		修改：同上

		追加
				异步
					fs.appendFile('名字','内容','编码',function(err){})
				同步：
					fs.appendFileSync('名字','内容','编码')
		读取 （文档 是字符串(.txt)，文件类型是编码(图片、压缩包)）
				异步：
				fs.readFile('名字','utf8',(err,data)=>{})   data读取到的内容
				同步：
				var data=fs.readFileSync('名字','utf8')  
		改名字
				异步：	
					fs.rename(oldname,newname,(err)=>{})
				同步:
					fs.renameSync(oldname,newname)
		删除
				异步：
				fs.unlink(名字,(err)=>{})
				同步：
				fs.unlinkSync(名字)		
		复制一个文件：先读取到内容-》然后再创建一个文件
文档：dir
		创建
			异步：
					fs.mkdir(名字,(err)=>{})
			同步：
					fs.mkdirSync(名字)
		改名字
			异步：
				fs.rename(oldname,newname,(err)=>{})
			同步：
				fs.renameSync(oldname,newname)
		删除:
			异步：
				 fs.rmdir(名字,(err)=>{})6、
			同步：
				fs.rmdirSync(名字)
			注意!!文件夹里面有文件时不可直接删除，需要先删除文件夹里面的文件，再删除文件夹
		读取：
			异步：*
				fs.readdir(名字,(err,file)=>{})  （file是数组，数组里面是文件名） [ '1.txt' ]
   			同步：
			   var data=fs.readdirSync(名字)




数据库musql              
                数据库的格式
				// 数字
						int  	常用
						bagint
				//字符串
						varchar
						longtext 
				//时间
						datetime
						tempstamp  自动存储

				//一个表格 即一个数组
				[
				{id:1,user:l,pass:l。。。。}
				{id:2,user:u,pass:u,}
				]


				通过sql 语句   简单语句操作 
					select	 查询
					update	 修改
					insert	 插入
					delete	 删除
					from 	 来自
					where 	 条件
					and 	 并且
					or 	     或者
					limit	 截取
					like	 模糊
					


				查找——————》
					select*from login   
					select*from login  where id=1  查找id=1的
					select*from login  where id=1 and = user = 2
					

					select 范围 from表名 where 条件
					在数据上才可以截取  
					select范围from表名where条件limit开始截取的下标，截取的数量
				

				模糊搜索
				select范围 from 表名 where user like' %a%' 
				use里面包含a 的 


				插入
					注意所有的key值都得有
					insert  into 表名 (user,pass,title,img ) values (1,2,3,4)
					insert into login (user,pass,title,img )values (1,2,3,4)              
					表格上会插入一条  多一条数据


				修改
					需要加条件 where
					update 表名 set user=value，pass=value   where 条件
					undate login set user=11，pass='hello' where id=1


				删除
					delete from  表名  where 条件
					delete from login where id=3
					

				mysql  模块下载
							npm i mysql --save

				npm i express --save   下载依赖
























		 
